﻿/*
 *	Copyright (c) 2009 Queensland University of Technology. All rights reserved.
 *	The QUT Bioinformatics Collection is open source software released under the 
 *	Microsoft Public License (Ms-PL): http://www.microsoft.com/opensource/licenses.mspx.
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;

using TabControl = QUT.Bio.Util.TabControl;
using TabItem = QUT.Bio.Util.TabItem;

namespace QUT.Bio.SilverMap {
	/// <summary>
	/// I'm striving to provide something that permits reasonably clean switching 
	/// between a couple of different views. At present, we have a side-by-side view, in
	/// the form of HorizontalLayout. This will be augmented with an over-and-under view
	/// or perhaps a plain shared tab pane view.
	/// <para>Anyway, it is a bit like Visual Studio, in that there are a number of 
	/// well-known views which can be distributed by a layout manager.</para>
	/// <para>It is rather restrictive, but for the moment it works.</para>
	/// </summary>

	public interface IPageLayout {
		#region Property: View
		/// <summary>
		///	Gets a reference to the GRaphView object embedded wityhin the layout. 
		/// </summary>

		View View {
			get;
		} 
		#endregion

		#region Property: Alignment
		/// <summary>
		/// Gets a reference to the stacked alignment display.
		/// </summary>

		HitStack Alignment {
			get;
		} 
		#endregion

		#region SequenceSummaryTable
		/// <summary>
		/// Gets a reference to the SequenceSummaryTable.
		/// </summary>

		SequenceSummaryTable SequenceSummaryTable {
			get;
		} 
		#endregion

		#region Property: SequencePropertyPanel
		/// <summary>
		/// Gets a reference to the SequenceSummaryTable.
		/// </summary>

		SequencePropertyPanel SequencePropertyPanel {
			get;
		} 
		#endregion

		#region Property: GeneDetailsPanel
		/// <summary>
		/// Gets a reference to a placeholder that is available for consumers to
		/// insert an additional set of detailed information, such as a Genbank 
		/// protein record.
		/// </summary>

		Grid GeneDetailsPanel {
			get;
		} 
		#endregion
		
		#region Property: HistoryPanel
		/// <summary>
		/// Gets a reference to the history panel
		/// </summary>
		
		HistoryPanel HistoryPanel {
			get;
		}
		#endregion
		
		#region Property: SearchControl
		/// <summary>
		/// Gets a reference to the search control.
		/// </summary>
		
		SearchControl SearchControl { get; }
		#endregion

		#region Method: Show
		/// <summary>
		/// Causes the specified ui element, which should be one of the well-known 
		/// views described by the above properties, to become visible.
		/// </summary>
		/// <param name="viewElement">The view to make prominent, one of View, Alignment, SequenceSummaryTable, SequencePropertyPanel or GeneDetailsPanel.</param>

		void Show ( FrameworkElement viewElement );
		#endregion

		#region Method: Hide
		/// <summary>
		/// Causes the specified ui element, which should be one of the well-known 
		/// views described by the above properties, to become hidden. If that suits the container.
		/// </summary>
		/// <param name="viewElement">The view to make hidden, one of View, Alignment, SequenceSummaryTable, SequencePropertyPanel or GeneDetailsPanel.</param>

		void Hide ( FrameworkElement viewElement );
		#endregion
	}
}
